package com.lagou.work03

import scala.collection.mutable

/*
第三题、用户位置时长统计
现有如下数据需要处理：
    字段：用户ID，位置ID，开始时间，停留时长（分钟）
 4行样例数据：
     UserA,LocationA,8,60 UserA,LocationA,9,60 UserB,LocationB,10,60 UserB,LocationB,11,80 样例数据中的数据含义是：用户UserA，在LocationA位置，从8点开始，停留了60钟
 处理要求：
    1、对同一个用户，在同一个位置，连续的多条记录进行合并
    2、合并原则：开始时间取最早时间，停留时长累计求和
 */

object UserLocation {

  //定义方法，比较得到最早时间
  def startTime(a: Int, b: Int): Int = {
    if(a < b) a else b
  }

  def main(args: Array[String]): Unit = {

    //list存储原始数据
    val list:List[(String,String,Int,Int)] =
      ("UserA","LocationA",8,60) :: ("UserA","LocationA",9,60) :: ("UserB","LocationB",10,60) :: ("UserB","LocationB",11,80) :: Nil
    //可变map集合
    val map:mutable.Map[(String,String),(Int,Int)] = mutable.Map()

    //遍历list，数据整合到map集合
    for (lists <- list){
      //定义option类型获取map值
      val tmp:Option[(Int,Int)] = map.get((lists._1,lists._2))
      //option模式匹配
      tmp match {
        case Some((a,b)) => map((lists._1,lists._2)) = (startTime(a,lists._3), b + lists._4)
        case None => map += (lists._1,lists._2) -> (lists._3,lists._4)
      }
    }
    //输出结果
    map.foreach(println(_))
  }
}
